#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tp2.h"

/*o tamanho das sk tao td igual...
  pra facilitar um pouco(Muito!)..
  se precisar fikar cada sk com seu tamanho certo fudeu!=D
 */

  void fileseek(FILE *arq, int steps, int tamsk){
    if(tamsk==200){
      fseek(arq,steps*450,0);
    }
    if(tamsk==100){
      fseek(arq,(steps*450)+200,0);
    }
    if(tamsk==125){
      fseek(arq,(steps*450)+300,0);
    }
    if(tamsk==4){
      fseek(arq,(steps*450)+425,0);
    }
  }

  PK* CarregaSKDaBase(int *nu,FILE *base,int tamsk){
    int i=0,a=0,b=0,nsk=0,nlista=0;
    char buffer[200],verifica[200];
    PK *listask,*found,aux;
    FILE *listainvertida;
    listainvertida=fopen("listatitulo.dat","a+");
    listask=(PK*)malloc(20*sizeof(PK));
    while(fgets(buffer,tamsk,base)!=NULL){
      fileseek(base,i,tamsk);
      fread(buffer,1,tamsk,base);
      b=tamsk;
      while(b<200){
	  buffer[b]=' ';
          b++;
      }
      while((buffer[a]!=' ')&&(a<tamsk)){
	while((buffer[a]!=' ')&&(a<tamsk)){
          verifica[a]=buffer[a];
          a++;
        }
        b=a;
        a++;
        while(b<200){
	  verifica[b]=' ';
          b++;
        }
        if(nsk>0){
	      found=BSearch(listask,verifica,0,nsk-1);
	}
        else{
          found=NULL;
        }
        if(found==NULL){
	  for(b=0;b<200;b++){
	    aux.titulo[b]=verifica[b];
          }
          aux.NRR=-1;
          fseek(listainvertida,nlista*204,0);
          fwrite(&aux,1,sizeof(PK),listainvertida);
	  nlista++;
          nsk++;
          AdicionaPK(listask,verifica,nsk);
	}
	else{
	  for(b=0;b<200;b++){
	    aux.titulo[b]=verifica[b];
          }
	  aux.NRR=found->NRR;
	  fseek(listainvertida,nlista*204,0);
 	  fwrite(&aux,1,sizeof(PK),listainvertida);
	  nlista++;
          found->NRR=nlista;
	}
      }
      b=0;
      i++;
      a=0;
    }
    *nu=nsk;
    fclose(listainvertida);
    return listask;
  }
